Cryptree 解析
暗号化に関するディレクトリ、ファイル
ZK-SNARKsを実装予定のファイル
Access Constrol as Interface
server/ test文
read access cryptree
https://scrapbox.io/files/65cba136de7ef8002541a01c.png
DK: data key
BK: backlink key
SK: subfolder key
FK: file key
CK: clearance key(option)
write access cryptree
https://scrapbox.io/files/65cba143be27db0025cbf474.png
WSK: write subfolder key
WXK: write clearance key(option)
From src/peergos/shared/user/fs/cryptree/CryptreeNode.java
CryptreeNodeクラス
役割
ディレクトリやファイルの読み書きアクセスを制御し、それらのセキュリティを確保する。
ファイルやディレクトリの内容を暗号化し、適切なキーを持つユーザーのみが内容を復号できるようにする。
ファイルやディレクトリのメタデータを保存し、必要に応じて更新する。
トランザクションベースの操作をサポートし、ファイルシステムの変更を一貫性を持って行う。
Cborableインターフェース: CBOR形式(Concise Binary Object Representation)でシリアライズ可能なオブジェクトを扱う
CBOR
簡潔なバイナリオブジェクト表現
フィールド
lastCommittedHash(最後にコミットされたハッシュ)
isDirectory(ディレクトリかどうかのフラグ)
bats(BAT(Block Address Translation)のIDリスト)
fromBaseKey(基本キーからのパディングされた暗号テキスト)
childrenOrData(子ノードまたはデータのフラグメント化されたパディングされた暗号テキスト)
fromParentKey(親キーからのパディングされた暗号テキスト)
FromBaseクラス
不変のフィールド
SymmetricKey型のparentOrData:
親ノードの鍵(ディレクトリの場合)またはデータ鍵(ファイルの場合)
Optional<SymmetricLinkToSigner>型のsigner:
署名者へのリンクを表すOptional型のSymmetricLinkToSignerオブジェクト
リンクがあるなら、暗号化されたノードが特定の署名者によって署名されることを意味する
RelativeCapabilityn型のnextChunk:
次のチャンクへのリンク(RelativeCapabilityオブジェクト)
これはファイルやディレクトリが複数のチャンクに分割されている場合に、次のチャンクへの参照情報を提供
toCborメソッド
FromBaseオブジェクトの状態をCBOR形式のマップにエンコードする
fromCbor静的メソッド
CBOR形式のデータからFromBaseオブジェクトを生成
getBaseBlockメソッド
fromBaseKey(PaddedCipherText型のオブジェクト)を、提供されたbaseKey(対称鍵)を使用して復号化する -> CBORデータ
ファイルアップロードから共有まで
鍵共有 key exchange
公開鍵暗号
Curve25519 boxer
Curve25519は、二つの当事者が安全な共有秘密(セッションキーなど)を生成するために使用される楕円曲線暗号化アルゴリズムです。このプロセスは、通信の暗号化に使われるキーを安全に交換することを可能にし、中間者攻撃などのセキュリティ脅威から保護します。
RSAやECDHE(楕円曲線Diffie-Hellman鍵交換)が使われているかも
使われてない
128ビットのセキュリティを確保できる
鍵作り直す rekeying
Salsa20Poly1305 symmetricProvider: これは、Salsa20ストリーム暗号とPoly1305 MAC(メッセージ認証コード)を組み合わせたもので、データの暗号化と認証に使用されます。鍵を作り直す際、新しいセッションキーや暗号化キーを生成してデータの安全性を保つために利用されることがあります。
Ed25519 signer: Ed25519は、署名と鍵交換に使用される楕円曲線暗号アルゴリズムです。鍵を作り直す過程で、新たに生成された鍵やデータが本物であることを保証するためのデジタル署名に使われます。
HMAC(ハッシュベースメッセージ認証コード)やAES(高度暗号化標準)が使われているかも
使われてない
Monasの場合
CrypTreeNodeクラス: 暗号化されたツリー構造内のノードを管理するクラス
create_nodeメソッド: 新しいノード(ディレクトリまたはファイル)を作成し、それに関連する暗号化キーとメタデータを生成します。ディレクトリの場合、子ノードへの参照を保持します。ファイルの場合、ファイルデータを暗号化してIPFSに保存し、そのCID(Content Identifier)をメタデータに記録します。
get_encrypted_metadataメソッド: ノードのメタデータを暗号化して返します。これにより、ノードの情報を安全に保存または転送できます。
add_nodeメソッド: ディレクトリノードに新しい子ノードを追加します。このメソッドは、ノードがディレクトリであることを確認し、子ノードのメタデータCID、名前、パス、およびそれがディレクトリかどうかの情報をメタデータに追加します。
reencryptメソッド: ノードのキーを再暗号化します。これは、親ノードのサブフォルダキーが変更された場合や、セキュリティ上の理由で定期的にキーを更新する必要がある場合に使用されます。
get_decrypt_keyメソッド: メタデータの復号化に必要なキーを取得します。これにより、保存または転送された暗号化メタデータを安全に復号化して読み取ることができます。